/* 
两个小时有效 提前五分钟请求 唯一凭据
 https://api.weixin.qq.com/cgi-bin/token
 ?grant_type=client_credential&appid=APPID&secret=APPSECRET
 首次本地没有 发送获取 保存下来 本地文件
 整理 
  读取本地文件 
    本地有文件 判断是否过去
    没有过期 直接使用
  本地没有文件
   发送请求获取accesstoken 保存下来本地文件 直接使用
*/
const axios = require('axios')

const fs = require('fs')
let base = 'https://api.weixin.qq.com/cgi-bin/token?'
let config = {
    token: 'liuyonghtmlwechat',
    appID: 'wx97570034fa2d5f07',
    appsecret: '88901fcef2851e5789b791fd3122a521'
}
let url = `${base}grant_type=client_credential&appid=${config.appID}&secret=${config.appsecret}`

class Wechat {
    constructor() {

    }
    gettoken() {
        return new Promise((resovle, reject) => {
            
            fs.readFile('./savetoken.txt', 'utf8', (err, data) => {
                console.log(data.length)
                if (data.length === 0) {
                   
                    axios({
                url: url,
                methods: 'get'
            }).then(res=>{
                let expires = Date.now() + (7200 - 300) * 1000
                resovle({expires:expires,token:res.data['access_token']})
            }).catch(err=>{
                reject(err)
            })
                } else {
                   resovle(false)
                }
            })
            
        })
        
    }
}

let start = function () {
    let char = new Wechat()
let obj = char.gettoken()
    obj.then(res=>{
        if(res === false) {
            fs.readFile('./savetoken.txt','utf8',(err,data)=>{
                console.log(JSON.parse(data))
                if(Date.now() > JSON.parse(data).expires) {
                    fs.unlink('./savetoken.txt',(err)=>{
                        fs.writeFile('./savetoken.txt','',(err,data)=>{
                        })
                        char.gettoken()
                    })
                }
            })
        } else {
            fs.writeFile('./savetoken.txt', JSON.stringify(res), (err) => {
            })
        }
    })
}
exports.start = start
exports.pro = function (req) {
    return new Promise((resovle,reject)=>{
        let xmldata = ''
    req.on('data',data=>{
        xmldata += data.toString()
    })
    req.on('end',()=>{
        console.log('完毕')
        resovle(xmldata)
    })
    })
}